home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / lib / collect.pl < prev    next >
Text File  |  1996-07-24  |  5KB  |  225 lines

  1. require "util.pl";
  2.  
  3. $root = $ARGV[0];
  4. $archetypes = "archetypes";
  5. $bmaps = "bmaps";
  6. $faces = "faces";
  7. $paths = $bmaps."."."paths";
  8. $faceExt = "\\.[A-Z0-9][A-Z0-9][A-Z0-9]";
  9.  
  10. ### main
  11. &info("looking ...");
  12. &traverse($root);
  13. &info("writing ...");
  14. open(ARCH,">".$archetypes) || &die("cannot open ".$archetypes);
  15. &archsOut;
  16. close(ARCH);
  17. open(BMAPS,">".$bmaps) || &die("cannot open ".$bmaps);
  18. &bmapsOut;
  19. close(BMAPS);
  20. open(BMAPS,">".$paths) || &die("cannot open ".$paths);
  21. &pathsOut;
  22. close(BMAPS);
  23. open(FACES,">".$faces) || &die("cannot open ".$faces);
  24. &facesOut;
  25. close(FACES);
  26. &stats;
  27. exit 0;
  28.  
  29. sub traverse {
  30.     local($dir) = shift;
  31.     local($file,$name);
  32.     foreach $file (<$dir/*>) {
  33.     $name = &basename($file,""); # DIR
  34.         if( -d $file && $name ne "dev" && $name ne "trashbin") {
  35.         &traverse($file);
  36.     } elsif( $file =~ /.*\.arc$/) {    # ARCHETYPE
  37.         $archsNum++;
  38.         push(@archs,$file);
  39.     } elsif( $file =~ /.*$faceExt$/) { # FACE
  40.         $facesNum++;
  41.         &warn("dublicate face ".$name." in ".$dir)
  42.         if $faces{$name};
  43.         $faces{$name} = $file;
  44.         # &warn($file." has no archetype") 
  45.         #    if ! -r $dir."/".&basename($file,$faceExt).".arc";
  46.     } elsif ( $file =~ /.*\.face$/) {    # Face information file
  47.         $facesFileNum++;
  48.         push(@face_files, $file);
  49.     }else {
  50.         $trashNum++;
  51.         &msg($file." no match");
  52.     }
  53. # Supress warning messages.  Almost all of the .xpm files are over
  54. # 14 characters
  55. #    &warn($file." is over 14 charactes")
  56. #        if length($name) > 14;
  57.     }
  58. }
  59.  
  60. sub storeFaceInfo {
  61.     local($lface,@values) = @_;
  62.  
  63.     if ($values[0] ne "") {
  64. #    blank.111 is a special case -
  65. #    since no foreground pixels will actually be drawn, foreground colors is
  66. #    not relevant.  Several monsters use blank.111 as part of their
  67. #    animation to make them appear invisible, but have some other
  68. #    foreground color set.
  69.     if ($fg{$lface} && $fg{$lface} ne $values[0] && $lface ne "blank.111") {
  70.         &warn($arch." duplicate fg color ".$fg{$lface}."/".$values[0]." face ".$lface);
  71.     } else {
  72.         $fg{$lface} = $values[0];
  73.     }
  74.     }
  75.     if ($values[1] ne "") {
  76.     if ($bg{$lface} && $bg{$lface} ne $values[1]) {
  77.         &warn($arch." duplicate bg color ".$bg{$lface}."/".$values[1]." face ".$lface);
  78.     } else {
  79.         $bg{$lface} = $values[1];
  80.     }
  81.     }
  82.     if ($values[2] ne "") {
  83.     if ($visibility{$lface} && $visibility{$lface} ne $values[2]) {
  84.         &warn($arch." duplicate visibilty ".$visibility{$lface}."/".$values[2]." face ".$lface);
  85.     } else {
  86.         $visibility{$lface} = $values[2];
  87.     }
  88.     }
  89. }
  90.     
  91.  
  92. sub archsOut {
  93.     foreach $arch (@archs) {
  94.     open(ARC,$arch) || &die("cannot open ".$arch);
  95. line:    while(<ARC>) {
  96.         chop;
  97.         ($var,@values) = split;
  98.         if ($var eq "Object") {
  99.         $lface[0] = "";
  100.         $#lface = 0;
  101.         $lfg = "";
  102.         $lbg = "";
  103.         $lvis = "";
  104.         }
  105.         if ($var eq "end" &&  $#lface !=0) {
  106.         $#lface--;
  107.         foreach $face (@lface) {
  108.             &storeFaceInfo($face, $lfg, $lbg, $lvis);
  109.         }
  110.         }
  111.         if ($var eq "color_fg") {
  112.         $lfg = $values[0];
  113.         next line;
  114.         }
  115.         if ($var eq "color_bg") {
  116.         $lbg = $values[0];
  117.         next line;
  118.         }
  119.         if ($var eq "visibility") {
  120.         $lvis = $values[0];
  121.         next line;
  122.         }
  123.         $lface[$#lface++] = $values[0]
  124.         if ($var eq "face");
  125.         $anim = 0 if $var eq "mina";
  126.         if ($anim) {
  127.         if (! $faces{$var}) {
  128.             &warn($arch." is missing face ".$var);
  129.         }
  130.         else {
  131.             $lface[$#lface++] = $var;
  132.         }
  133.         }
  134.         &warn($arch." is missing face ".$values[0])
  135.         if $var eq "face" && ! $faces{$values[0]};
  136.         $anim = 1 if $var eq "anim";
  137.         print ARCH $_,"\n";
  138.     }
  139.     close(ARC);
  140.     }
  141. }
  142.  
  143. sub pline {
  144.     local($face) = shift;
  145.     print BMAPS sprintf("%05d",$idx++)," ",$face,"\n";
  146. }
  147.  
  148. sub opline {
  149.     local($face) = shift;
  150.     print BMAPS sprintf("\\%05d",$idx++),"\t",$face,"\n";
  151. }
  152.  
  153. sub pheader {
  154.     print BMAPS "# This file is generated by $0, do not edit\n";
  155. }
  156.  
  157. sub bmapsOut {
  158.     &pheader;
  159.     $idx = 0;
  160.     &pline("bug.111");
  161.     foreach $face (sort(keys %faces)) {
  162.     &pline($face) if $face !~ /bug\.111/;
  163.     }
  164. }
  165.  
  166. sub pathsOut {
  167.     &pheader;
  168.     $idx = 0;
  169.     &opline($root."/system/bug.111");
  170.     foreach $face (sort(keys %faces)) {
  171.     &opline($faces{$face}) if $faces{$face} !~ /bug\.111/;
  172.     }
  173. }
  174.  
  175. sub facesOut {
  176.     foreach $face (@face_files) {
  177.     open(FACE, $face) || &die("cannot open ".$face);
  178.     while(<FACE>) {
  179.         chop;
  180.         local ($var, @values) = split;
  181.         if ($var eq "face") {
  182.         $lface = $values[0];
  183.         $lfg = "";
  184.         $lbg = "";
  185.         $lvis = "";
  186.         }
  187.         elsif ($var eq "color_fg") {
  188.         $lfg = $values[0];
  189.         }
  190.         elsif ($var eq "color_bg") {
  191.         $lbg = $values[0];
  192.         }
  193.         elsif ($var eq "visibility") {
  194.         $lvis = $values[0];
  195.         }
  196.         elsif ($var eq "end") {
  197.         &storeFaceInfo($lface, $lfg, $lbg, $lvis);
  198.         }
  199.     }
  200.     close(FACE);
  201.     }
  202.     print FACES "# This file is generated by $0, do not edit\n";
  203.     foreach $face (sort(keys %faces)) {
  204.     if ($fg{$face} ne "" || $bg{$face} ne "" || $visibility{$face} ne "")
  205.     {
  206.     print FACES "face ".$face."\n";
  207.     print FACES "color_fg ".$fg{$face}."\n"
  208.         if $fg{$face} ne "";
  209.     print FACES "color_bg ".$bg{$face}."\n"
  210.         if $bg{$face} ne "";
  211.     print FACES "visibility ".$visibility{$face}."\n"
  212.         if $visibility{$face} ne "";
  213.     print FACES "end\n";
  214.     }
  215.     }
  216. }
  217.  
  218. ### print out statical information
  219. sub stats {
  220.     &info(Archs.":\t".$archsNum);
  221.     &info(Images.":\t".$facesNum);
  222.     &info(Faces.":\t".$facesFileNum);
  223.     &info(Trash.":\t".$trashNum);
  224. }
  225.